// 点击 收货地址
/**
 * 1 绑定点击事件
 * 2 调用小程序内置 api 获取用户的收货地址  如果用户第一次点击拒绝 那么在此点击就不会调起
 * 
 * 2 获取 用户 对小程序 所授予 获取地址的 权限状态 scope
 *    1 假设 用户 低级获取收货地址的提示框 确定 authSetting scope.address:true
 *    2 假设 用户 从来没有调取过 收货地址的api authSetting scope.address:undefined
 *    3 假设 用户 低级获取收货地址的提示框 取消 authSetting scope.address:false
 *      1 诱导用户 自己 打开授权设置页面 wx.openSetting 当用户重新给与 获取地址权限的时候
 *      2 获取收货地址
 *    4 把获取到的收货地址存入到本地缓存中
 */

/**
   * 全选的实现  数据的展示
   * 1 onShow 获取缓存中的购物车数组
   * 2 根据购物车中的商品数据进行计算 所有的商品都被选中 checked=true 全选就选中
   */

/**
 * 总价格和总数量
 * 1 都需要商品被选中 我们才拿它来计算
 * 2 获取购物车数组
 * 3 遍历
 * 4 判断商品是否被选中
 * 5 总价格 += 商品的单价 * 商品的数量
 * 6 总数量 += 商品的数量
 * 7 把计算后的价格和数量 设置回data中即可
 */

/**
 * 商品的选中状态
 * 1 绑定change事件
 * 2 获取到被修改的商品对象
 * 3 商品对象的选中状态 取反
 * 4 重新填充回data中和缓存中
 * 5 重新计算全选。总价格 总数量
 */

 /**
  * 全选和反选功能
  * 1 复选框绑定事件
  * 2 过去 data中的全选变量 allChecked
  * 3 直接取反
  * 4 遍历购物车数据 让里面的商品的选中状态跟随 allChecked改变
  * 5 把购物车数组 和 allChecked 重新设置回data中 把购物车重新设置为 缓存中
  */
import { getSetting, chooseAddress, openSetting } from "../../utils/asyncWx.js";
import regeneratorRuntime from '../../lib/runtime/runtime';
Page({
  data: {
    address: {},
    cart: [],
    allChecked: false,
    totalPrice: 0,
    totalNum: 0

  },



  // ⽣命周期回调—监听⻚⾯显⽰

  onShow() {
    // 1 获取缓存中的收货地址信息
    const address = wx.getStorageSync("address");
    // 获取缓存中的购物车数据
    const cart = wx.getStorageSync("cart") || [];

    this.setData({
      address
    })
    this.setCart(cart);
    
  },

  async handleChooseAddress() {
    try {
      // 1 获取权限状态
      const res1 = await getSetting();
      const scopeAddress = res1.authSetting["scope.address"];
      // 2 判断权限状态
      if (scopeAddress === false) {
        // 3 诱导用户打开授权页面
        const res3 = await openSetting();
      }
      // 4 调用获取收货地址的api
      const address = await chooseAddress();
      address.all = address.provinceName + address.cityName + address.countyName + address.detailInfo;
      // 5 存入缓存中
      wx.setStorageSync("address", address);
    } catch (error) {
      console.log(error);
    }
  },
  // 商品的选中
  handleItemChange(e) {
    // 1 获取呗修改的商品的id
    const goods_id = e.currentTarget.dataset.id;
    // 2 获取购物车数组 
    let { cart } = this.data;
    // 3 找到被修改的商品对象
    let index = cart.findIndex(v => v.goods_id === goods_id);
    // 4 选中状态取反
    cart[index].checked = !cart[index].checked;
    
    this.setCart(cart);

  },
  // 设置购物车状态的同事 重新计算 底部工具栏的数据 全选 总价格 购买的数量
  setCart(cart){
    // 重新计算总价格和总数量
    let allChecked = true;
    // 总价格 总数量
    let totalPrice = 0;
    let totalNum = 0;
    cart.forEach(v => {
      if (v.checked) {
        totalPrice += v.num * v.goods_price
        totalNum += v.num;
      } else {
        allChecked = false;
      }
    })
    // 判断数组是否为空
    allChecked = cart.length != 0 ? allChecked : false;
    this.setData({
      cart,
      totalPrice,
      totalNum,
      allChecked
    });
    wx.setStorageSync("cart", cart);
  },

  // 商品的全选和反选
  handleAllCheckedChange(){
    // 1 获取data中的数据
    let {cart,allChecked} = this.data;
    // 2 修改值
    allChecked = !allChecked;
    // 3 循环
    
  },


  onLoad: function (options) {

  }

})